Skip to content

Fix duplicate connection/logs in Webdev #2635

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Jun 20, 2025

Conversation

jyameo
Copy link
Contributor

@jyameo jyameo commented Jun 17, 2025

Fix duplicate app logs on page refresh in Webdev
Fixes: #2604

Problem
Each page refresh created duplicate stdout listeners for the same app, causing exponential log duplication (1 log → 2 logs → 3 logs, etc.).

Root Cause
app_domain.dart created new VM service stdout listeners on every dwds.connectedApps event without checking if listeners already existed for the same appId.

Solution
Added simple tracking to prevent duplicate listeners:

  • Track active appIds in a Set _activeListeners
  • Only create stdout listeners if not already listening for that appId
  • Clean up tracking when connections end

Changes
app_domain.dart: Added listener deduplication with minimal code changes

Result

  • Single log event per refresh (no more duplicates)
  • All debugging functionality preserved
  • No breaking changes

This reverts commit 2ccd2d9.
@jyameo jyameo mentioned this pull request Jun 17, 2025
@jyameo jyameo changed the title Fix duplicate connection/logs Fix duplicate connection/logs in Webdev Jun 17, 2025
Copy link

auto-submit bot commented Jun 19, 2025

autosubmit label was removed for dart-lang/webdev/2635, because - The status or check suite publish / validate has failed. Please fix the issues identified (or deflake) before re-applying this label.

Copy link
Collaborator

@bkonyi bkonyi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a couple minor comments, but LGTM!

@jyameo
Copy link
Contributor Author

jyameo commented Jun 20, 2025

@bkonyi I made the following changes:

  • use _appStates.containsKey(appId) to check for existing connections.
  • I removed the _activeListeners set entirely since the check is happening at the AppStates level.
  • Also removed the unnecessary vmService.streamCancel('Stdout');
  • I wasn't sure about server.buildResults so I left it as is for now.

Let me know what you think and If I missed something here. Thanks :)

@jyameo jyameo merged commit 6dc3dde into dart-lang:main Jun 20, 2025
47 checks passed
copybara-service bot pushed a commit to dart-lang/sdk that referenced this pull request Jun 23, 2025
Revisions updated by `dart tools/rev_sdk_deps.dart`.

ai (https://github.com/dart-lang/ai/compare/f2b48c6..12ac0a4):
  12ac0a4  2025-06-18  Jacob MacDonald  make the log file test less flaky by retrying deletes and reads (dart-lang/ai#180)
  dbedc6d  2025-06-18  Jacob MacDonald  fix cruft in description (dart-lang/ai#179)
  3ab9482  2025-06-18  Jacob MacDonald  improve tool description for the dtd connection tool and improve error messages (dart-lang/ai#178)
  4ca0ff1  2025-06-18  Jacob MacDonald  Use shared Implementation type, add clientInfo field to MCPServer (dart-lang/ai#175)
  885a4c5  2025-06-18  Jacob MacDonald   Add `--log-file` argument to log all protocol traffic to a file (dart-lang/ai#176)
  7ca3eba  2025-06-17  Nate Bosch  Add JSON schema for test runner arguments (dart-lang/ai#169)

core (https://github.com/dart-lang/core/compare/dc97530..b59ecf4):
  b59ecf4c  2025-06-18  Lasse R.H. Nielsen  Optimize surrogate decoding. (dart-lang/core#894)

dartdoc (https://github.com/dart-lang/dartdoc/compare/4ceea6b..f1fe177):
  f1fe1775  2025-06-16  Sarah Zakarias  Refactor 404 error page to use div instead of p for search form (dart-lang/dartdoc#4064)

ecosystem (https://github.com/dart-lang/ecosystem/compare/64aac3a..d5233c6):
  d5233c6  2025-06-13  dependabot[bot]  Bump the github-actions group with 5 updates (dart-lang/ecosystem#351)

web (https://github.com/dart-lang/web/compare/c8c1c28..4b2f02e):
  4b2f02e  2025-06-18  nikeokoronkwo  Add Variable Declaration Support (dart-lang/web#382)

webdev (https://github.com/dart-lang/webdev/compare/661dafd..6dc3dde):
  6dc3ddef  2025-06-20  Jessy Yameogo  Fix duplicate connection/logs in Webdev (dart-lang/webdev#2635)
  0c8a17b4  2025-06-20  Morgan :)  Remove dependency overrides. (dart-lang/webdev#2634)
  a3218638  2025-06-16  Jessy Yameogo  modifying DWDS Injector to always inject client and introduce useDwdsWebSocketConnection flag (dart-lang/webdev#2629)
  2eb27546  2025-06-16  Morgan :)  Prepare for `build_runner` changes. (dart-lang/webdev#2633)

Change-Id: Ib323bea37dd77ed94387e77d9c504f889bfa8050
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/436021
Auto-Submit: Devon Carew <[email protected]>
Reviewed-by: Konstantin Shcheglov <[email protected]>
Commit-Queue: Konstantin Shcheglov <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Bug: Webdev duplicates app connections for each refresh.
2 participants